xlat v2: Make setup_mmu_config public
authorAntonio Nino Diaz <[email protected]>
Sun, 15 Jul 2018 15:42:01 +0000 (16:42 +0100)
committerAntonio Nino Diaz <[email protected]>
Sun, 15 Jul 2018 15:42:01 +0000 (16:42 +0100)
This allows other parts of the code to reuse it. No functional changes.

Change-Id: Ib052ae235c422d9179958bd3016c3e678779ae9b
Signed-off-by: Antonio Nino Diaz <[email protected]>
include/lib/xlat_tables/xlat_mmu_helpers.h
include/lib/xlat_tables/xlat_tables_v2_helpers.h
lib/xlat_tables_v2/aarch32/xlat_tables_arch.c
lib/xlat_tables_v2/aarch64/xlat_tables_arch.c
lib/xlat_tables_v2/xlat_tables_context.c
lib/xlat_tables_v2/xlat_tables_private.h

index b6c53e267d7d593e64f19702617f357ce9c03d0f..a290a92d8b6f004cd536aa8727d63d9d4b570851 100644 (file)
  */
 #define XLAT_TABLE_NC                  (U(1) << 1)
 
+/*
+ * Offsets into a mmu_cfg_params array generated by setup_mmu_cfg(). All
+ * parameters are 64 bits wide.
+ */
+#define MMU_CFG_MAIR           0
+#define MMU_CFG_TCR            1
+#define MMU_CFG_TTBR0          2
+#define MMU_CFG_PARAM_MAX      3
+
 #ifndef __ASSEMBLY__
 
 #include <sys/types.h>
 
+/*
+ * Return the values that the MMU configuration registers must contain for the
+ * specified translation context. `params` must be a pointer to array of size
+ * MMU_CFG_PARAM_MAX.
+ */
+void setup_mmu_cfg(uint64_t *params, unsigned int flags,
+                  const uint64_t *base_table, unsigned long long max_pa,
+                  uintptr_t max_va, int xlat_regime);
+
 #ifdef AARCH32
 /* AArch32 specific translation table API */
 void enable_mmu_secure(unsigned int flags);
index 7438425063f3acc010509a4576f639f4fbf42349..82d96e7d78e732d3da649035e61c7314e3b10fc7 100644 (file)
 #error "Do not include this header file directly. Include xlat_tables_v2.h instead."
 #endif
 
-/* Offsets into mmu_cfg_params array. All parameters are 64 bits wide. */
-#define MMU_CFG_MAIR           0
-#define MMU_CFG_TCR            1
-#define MMU_CFG_TTBR0          2
-#define MMU_CFG_PARAM_MAX      3
-
 #ifndef __ASSEMBLY__
 
 #include <cassert.h>
@@ -30,9 +24,6 @@
 #include <xlat_tables_arch.h>
 #include <xlat_tables_defs.h>
 
-/* Parameters of register values required when enabling MMU */
-extern uint64_t mmu_cfg_params[MMU_CFG_PARAM_MAX];
-
 /* Forward declaration */
 struct mmap_region;
 
index 6eb1d2c14e929115c21c8f87b990eb3c4757993d..2f71110c33245030cc9a0ada11e0d2e71459019a 100644 (file)
@@ -18,8 +18,6 @@
 #error ARMv7 target does not support LPAE MMU descriptors
 #endif
 
-uint64_t mmu_cfg_params[MMU_CFG_PARAM_MAX];
-
 /*
  * Returns 1 if the provided granule size is supported, 0 otherwise.
  */
@@ -109,9 +107,9 @@ int xlat_arch_current_el(void)
  * Function for enabling the MMU in Secure PL1, assuming that the page tables
  * have already been created.
  ******************************************************************************/
-void setup_mmu_cfg(unsigned int flags, const uint64_t *base_table,
-                  unsigned long long max_pa, uintptr_t max_va,
-                  __unused int xlat_regime)
+void setup_mmu_cfg(uint64_t *params, unsigned int flags,
+                  const uint64_t *base_table, unsigned long long max_pa,
+                  uintptr_t max_va, __unused int xlat_regime)
 {
        uint64_t mair, ttbr0;
        uint32_t ttbcr;
@@ -180,7 +178,7 @@ void setup_mmu_cfg(unsigned int flags, const uint64_t *base_table,
 #endif
 
        /* Now populate MMU configuration */
-       mmu_cfg_params[MMU_CFG_MAIR] = mair;
-       mmu_cfg_params[MMU_CFG_TCR] = (uint64_t) ttbcr;
-       mmu_cfg_params[MMU_CFG_TTBR0] = ttbr0;
+       params[MMU_CFG_MAIR] = mair;
+       params[MMU_CFG_TCR] = (uint64_t) ttbcr;
+       params[MMU_CFG_TTBR0] = ttbr0;
 }
index 06628db294b91c95214a247f66a84e2cc6d49179..0f289e28ea67d23333d59198e107d9b46fae585c 100644 (file)
@@ -13,8 +13,6 @@
 #include <xlat_tables_v2.h>
 #include "../xlat_tables_private.h"
 
-uint64_t mmu_cfg_params[MMU_CFG_PARAM_MAX];
-
 /*
  * Returns 1 if the provided granule size is supported, 0 otherwise.
  */
@@ -180,8 +178,9 @@ int xlat_arch_current_el(void)
        return el;
 }
 
-void setup_mmu_cfg(unsigned int flags, const uint64_t *base_table,
-                  unsigned long long max_pa, uintptr_t max_va, int xlat_regime)
+void setup_mmu_cfg(uint64_t *params, unsigned int flags,
+                  const uint64_t *base_table, unsigned long long max_pa,
+                  uintptr_t max_va, int xlat_regime)
 {
        uint64_t mair, ttbr0, tcr;
        uintptr_t virtual_addr_space_size;
@@ -248,7 +247,7 @@ void setup_mmu_cfg(unsigned int flags, const uint64_t *base_table,
        ttbr0 |= TTBR_CNP_BIT;
 #endif
 
-       mmu_cfg_params[MMU_CFG_MAIR] = mair;
-       mmu_cfg_params[MMU_CFG_TCR] = tcr;
-       mmu_cfg_params[MMU_CFG_TTBR0] = ttbr0;
+       params[MMU_CFG_MAIR] = mair;
+       params[MMU_CFG_TCR] = tcr;
+       params[MMU_CFG_TTBR0] = ttbr0;
 }
index 671d8948be4e1917f8d735341c06305d9cced95b..76c429d759ece20c869ee34c9f7e6d9cbe8cde3d 100644 (file)
 
 #include "xlat_tables_private.h"
 
+/*
+ * MMU configuration register values for the active translation context. Used
+ * from the MMU assembly helpers.
+ */
+uint64_t mmu_cfg_params[MMU_CFG_PARAM_MAX];
+
 /*
  * Each platform can define the size of its physical and virtual address spaces.
  * If the platform hasn't defined one or both of them, default to
@@ -105,7 +111,8 @@ void init_xlat_tables(void)
 
 void enable_mmu_secure(unsigned int flags)
 {
-       setup_mmu_cfg(flags, tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
+       setup_mmu_cfg((uint64_t *)&mmu_cfg_params, flags,
+                     tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
                      tf_xlat_ctx.va_max_address, EL1_EL0_REGIME);
        enable_mmu_direct(flags);
 }
@@ -114,14 +121,16 @@ void enable_mmu_secure(unsigned int flags)
 
 void enable_mmu_el1(unsigned int flags)
 {
-       setup_mmu_cfg(flags, tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
+       setup_mmu_cfg((uint64_t *)&mmu_cfg_params, flags,
+                     tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
                      tf_xlat_ctx.va_max_address, EL1_EL0_REGIME);
        enable_mmu_direct_el1(flags);
 }
 
 void enable_mmu_el3(unsigned int flags)
 {
-       setup_mmu_cfg(flags, tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
+       setup_mmu_cfg((uint64_t *)&mmu_cfg_params, flags,
+                     tf_xlat_ctx.base_table, MAX_PHYS_ADDR,
                      tf_xlat_ctx.va_max_address, EL3_REGIME);
        enable_mmu_direct_el3(flags);
 }
index fa770dbbf223f0b1e62a81e3109a83e654c5c733..93640ddbce7e33df3071c5d232dee49f044efb3f 100644 (file)
@@ -88,11 +88,6 @@ int xlat_arch_current_el(void);
  */
 unsigned long long xlat_arch_get_max_supported_pa(void);
 
-/* Enable MMU and configure it to use the specified translation tables. */
-void setup_mmu_cfg(unsigned int flags, const uint64_t *base_table,
-                  unsigned long long max_pa, uintptr_t max_va,
-                  int xlat_regime);
-
 /*
  * Return 1 if the MMU of the translation regime managed by the given xlat_ctx_t
  * is enabled, 0 otherwise.